<HTML>
<HEAD>
<TITLE>
IndiceLineal.cpp
</TITLE>
</HEAD>
<BODY>
<PRE>
<font color="blue">#include</font> <font color="maroon">"IndiceLineal.h"</font>

IndiceLineal<font color="black">:</font><font color="black">:</font>IndiceLineal<font color="black">(</font>PrimaryKey <font color="black">*</font>primaryKey<font color="black">)</font> <font color="blue">throw</font><font color="black">(</font>IndexException<font color="black">)</font> <font color="black">:</font> EstrategiaIndice<font color="black">(</font>primaryKey<font color="black">)</font>
<font color="black">{</font>
    CantidadBloquesReservados<font color="black">=</font><font color="maroon">10</font>;
    CantidadBloquesUsados<font color="black">=</font><font color="maroon">0</font>;
    informacion<font color="black">=</font>NULL;
    Redimencionar<font color="black">(</font><font color="maroon">10</font><font color="black">)</font>;
    dato<font color="black">=</font><font color="blue">new</font> DatoIndice<font color="black">(</font>secondaryKey, primaryKey<font color="black">)</font>;
<font color="black">}</font>



<font color="blue">void</font> IndiceLineal<font color="black">:</font><font color="black">:</font>Modificar<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>DatoSerializadoSinModificar, <font color="blue">char</font> <font color="black">*</font>DatoSerializadoModificado, <font color="blue">unsigned</font> <font color="blue">int</font> idModificado<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">char</font><font color="black">*</font> aux<font color="black">=</font>dato<font color="black">-</font><font color="black">&#62;</font>GetDato<font color="black">(</font>DatoSerializadoModificado,idModificado<font color="black">)</font>;
    <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>DatoSerializadoSinModificar,aux<font color="black">)</font><font color="black">!</font><font color="black">=</font><font color="maroon">0</font> <font color="black">)</font>
    <font color="black">{</font>
        Eliminar<font color="black">(</font>DatoSerializadoSinModificar<font color="black">)</font>;
        Cargar<font color="black">(</font>DatoSerializadoModificado,idModificado<font color="black">)</font>;
        <font color="blue">return</font>;
    <font color="black">}</font>
    free<font color="black">(</font>aux<font color="black">)</font>;

    <font color="blue">int</font> i;
    <font color="blue">for</font><font color="black">(</font>i<font color="black">=</font><font color="maroon">0</font>;i<font color="black">&#60;</font>CantidadBloquesUsados;i<font color="black">+</font><font color="black">+</font><font color="black">)</font>
    <font color="black">{</font>

        <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>DatoSerializadoSinModificar, informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
        <font color="black">{</font>

            <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>EsIndicePrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
            <font color="black">{</font>
                <font color="blue">char</font><font color="black">*</font> aux<font color="black">=</font>dato<font color="black">-</font><font color="black">&#62;</font>GetDato<font color="black">(</font>DatoSerializadoModificado,idModificado<font color="black">)</font>;
                memcpy<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,aux,GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
                free<font color="black">(</font>aux<font color="black">)</font>;
                <font color="blue">break</font>;
            <font color="black">}</font>
            <font color="blue">else</font>
            <font color="black">{</font>
                <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararID<font color="black">(</font>DatoSerializadoSinModificar, informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
                <font color="black">{</font>
                    <font color="blue">char</font><font color="black">*</font> aux<font color="black">=</font>dato<font color="black">-</font><font color="black">&#62;</font>GetDato<font color="black">(</font>DatoSerializadoModificado,idModificado<font color="black">)</font>;
                    memcpy<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,aux,GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
                    free<font color="black">(</font>aux<font color="black">)</font>;
                    <font color="blue">break</font>;
                <font color="black">}</font>
            <font color="black">}</font>

        <font color="black">}</font>
    <font color="black">}</font>

<font color="black">}</font>



IndiceLineal<font color="black">:</font><font color="black">:</font>IndiceLineal<font color="black">(</font>PrimaryKey <font color="black">*</font>PrimaryKey, SecondaryKey<font color="black">*</font> secondaryKey, EstrategiaIndice <font color="black">*</font>indicePrimario<font color="black">)</font> <font color="blue">throw</font><font color="black">(</font>IndexException<font color="black">)</font>
        <font color="black">:</font>EstrategiaIndice<font color="black">(</font>PrimaryKey, secondaryKey, indicePrimario<font color="black">)</font>
<font color="black">{</font>
    CantidadBloquesReservados<font color="black">=</font><font color="maroon">10</font>;
    CantidadBloquesUsados<font color="black">=</font><font color="maroon">0</font>;
    informacion<font color="black">=</font>NULL;
    Redimencionar<font color="black">(</font><font color="maroon">10</font><font color="black">)</font>;
    dato<font color="black">=</font><font color="blue">new</font> DatoIndice<font color="black">(</font>secondaryKey, primaryKey<font color="black">)</font>;
<font color="black">}</font>



std<font color="black">:</font><font color="black">:</font>vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> IndiceLineal<font color="black">:</font><font color="black">:</font>Listar<font color="black">(</font>std<font color="black">:</font><font color="black">:</font>string claveInicial, std<font color="black">:</font><font color="black">:</font>string claveFinal<font color="black">)</font>
<font color="black">{</font>
    std<font color="black">:</font><font color="black">:</font>vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> vector;

    <font color="blue">for</font><font color="black">(</font><font color="blue">int</font> i<font color="black">=</font><font color="maroon">0</font>;i<font color="black">&#60;</font>CantidadBloquesUsados;i<font color="black">+</font><font color="black">+</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>claveInicial.c_str<font color="black">(</font><font color="black">)</font>,claveInicial.length<font color="black">(</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">&#60;</font><font color="black">=</font><font color="maroon">0</font>
                <font color="black">&</font><font color="black">&</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>claveFinal.c_str<font color="black">(</font><font color="black">)</font>,claveFinal.length<font color="black">(</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">&#62;</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
                <font color="black">|</font><font color="black">|</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>claveInicial.c_str<font color="black">(</font><font color="black">)</font>,claveInicial.length<font color="black">(</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">&#62;</font><font color="black">=</font><font color="maroon">0</font>
                        <font color="black">&</font><font color="black">&</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>claveFinal.c_str<font color="black">(</font><font color="black">)</font>,claveFinal.length<font color="black">(</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">&#60;</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>EsIndicePrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
            <font color="black">{</font>
                vector.push_back<font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>GetID<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">)</font>;
            <font color="black">}</font>
            <font color="blue">else</font>
            <font color="black">{</font>
                <font color="blue">char</font><font color="black">*</font> clavePrimaria<font color="black">=</font>dato<font color="black">-</font><font color="black">&#62;</font>GetClavePrimaria<font color="black">(</font><font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">)</font>;
                std<font color="black">:</font><font color="black">:</font>vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> aux<font color="black">=</font>indicePrimario<font color="black">-</font><font color="black">&#62;</font>Buscar<font color="black">(</font>clavePrimaria<font color="black">)</font>;

                <font color="blue">if</font><font color="black">(</font>aux.size<font color="black">(</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
                <font color="black">{</font>
                    <font color="green">//el dato no esta en el indice primario</font>
                    memmove<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">+</font><font color="maroon">1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,<font color="black">(</font>CantidadBloquesUsados<font color="black">-</font>i<font color="maroon">-1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
                    CantidadBloquesUsados<font color="black">-</font><font color="black">-</font>;
                    i<font color="black">-</font><font color="black">-</font>;
                <font color="black">}</font>
                <font color="blue">else</font>
                    vector.push_back<font color="black">(</font>aux<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">)</font>;

                free<font color="black">(</font>clavePrimaria<font color="black">)</font>;

            <font color="black">}</font>
        <font color="black">}</font>
    <font color="black">}</font>
    <font color="blue">return</font> vector;

<font color="black">}</font>



<font color="blue">int</font> IndiceLineal<font color="black">:</font><font color="black">:</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>EsIndicePrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
        <font color="blue">return</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>primaryKey<font color="black">-</font><font color="black">&#62;</font>GetTamanio<font color="black">(</font><font color="black">)</font> <font color="black">+</font> <font color="maroon">4</font>; <font color="green">//los 4 son un int</font>
    <font color="blue">return</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>primaryKey<font color="black">-</font><font color="black">&#62;</font>GetTamanio<font color="black">(</font><font color="black">)</font> <font color="black">+</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>secondaryKey<font color="black">-</font><font color="black">&#62;</font>GetTamanio<font color="black">(</font><font color="black">)</font>;
<font color="black">}</font>



std<font color="black">:</font><font color="black">:</font>vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> IndiceLineal<font color="black">:</font><font color="black">:</font>Buscar<font color="black">(</font>std<font color="black">:</font><font color="black">:</font>string claveABuscar<font color="black">)</font>
<font color="black">{</font>
    std<font color="black">:</font><font color="black">:</font>vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> vector;

    <font color="blue">for</font><font color="black">(</font><font color="blue">int</font> i<font color="black">=</font><font color="maroon">0</font>;i<font color="black">&#60;</font>CantidadBloquesUsados;i<font color="black">+</font><font color="black">+</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>claveABuscar.c_str<font color="black">(</font><font color="black">)</font>,claveABuscar.length<font color="black">(</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>EsIndicePrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
            <font color="black">{</font>
                vector.push_back<font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>GetID<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">)</font>;
                <font color="blue">break</font>;
            <font color="black">}</font>
            <font color="blue">else</font>
            <font color="black">{</font>
                <font color="blue">char</font><font color="black">*</font> clavePrimaria<font color="black">=</font>dato<font color="black">-</font><font color="black">&#62;</font>GetClavePrimaria<font color="black">(</font><font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">)</font>;
                std<font color="black">:</font><font color="black">:</font>vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> aux<font color="black">=</font>indicePrimario<font color="black">-</font><font color="black">&#62;</font>Buscar<font color="black">(</font>clavePrimaria<font color="black">)</font>;

                <font color="blue">if</font><font color="black">(</font>aux.size<font color="black">(</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
                <font color="black">{</font>
                    <font color="green">//el dato no esta en el indice primario</font>
                    memmove<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">+</font><font color="maroon">1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,<font color="black">(</font>CantidadBloquesUsados<font color="black">-</font>i<font color="maroon">-1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
                    CantidadBloquesUsados<font color="black">-</font><font color="black">-</font>;
                    i<font color="black">-</font><font color="black">-</font>;
                <font color="black">}</font>
                <font color="blue">else</font>
                    vector.push_back<font color="black">(</font>aux<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">)</font>;

                free<font color="black">(</font>clavePrimaria<font color="black">)</font>;

            <font color="black">}</font>
        <font color="black">}</font>
    <font color="black">}</font>

    <font color="blue">return</font> vector;
<font color="black">}</font>



<font color="blue">void</font> IndiceLineal<font color="black">:</font><font color="black">:</font>Redimencionar<font color="black">(</font><font color="blue">int</font> nuevoTamanio<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">char</font><font color="black">*</font> nuevoBuffer<font color="black">=</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font> malloc<font color="black">(</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">*</font>nuevoTamanio<font color="black">)</font>;

    <font color="blue">if</font><font color="black">(</font>informacion<font color="black">)</font>
    <font color="black">{</font>
        memcpy<font color="black">(</font>nuevoBuffer,informacion,CantidadBloquesUsados<font color="black">)</font>;
        free<font color="black">(</font>informacion<font color="black">)</font>;
    <font color="black">}</font>

    informacion<font color="black">=</font>nuevoBuffer;
<font color="black">}</font>



IndiceLineal<font color="black">:</font><font color="black">:</font>~IndiceLineal<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>informacion<font color="black">)</font>
        free<font color="black">(</font>informacion<font color="black">)</font>;
    free<font color="black">(</font>dato<font color="black">)</font>;
<font color="black">}</font>



<font color="blue">void</font> IndiceLineal<font color="black">:</font><font color="black">:</font>Eliminar<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>DatoSerializadoAEliminar<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>CantidadBloquesReservados<font color="black">*</font><font color="maroon">0</font>.<font color="maroon">1</font><font color="black">&#62;</font>CantidadBloquesUsados<font color="black">)</font>
        Redimencionar<font color="black">(</font>CantidadBloquesReservados<font color="black">*</font><font color="maroon">0</font>.<font color="maroon">5</font><font color="black">)</font>;


    <font color="blue">int</font> i;
    <font color="blue">for</font><font color="black">(</font>i<font color="black">=</font><font color="maroon">0</font>;i<font color="black">&#60;</font>CantidadBloquesUsados;i<font color="black">+</font><font color="black">+</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>DatoSerializadoAEliminar,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="green">//encontre el dato a borrar</font>
            <font color="blue">if</font><font color="black">(</font>i<font color="black">!</font><font color="black">=</font>CantidadBloquesUsados<font color="maroon">-1</font><font color="black">)</font>
            <font color="black">{</font>
                <font color="blue">if</font><font color="black">(</font>EsIndicePrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
                <font color="black">{</font>
                    memmove<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">+</font><font color="maroon">1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,<font color="black">(</font>CantidadBloquesUsados<font color="black">-</font>i<font color="maroon">-1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
                    <font color="blue">break</font>;
                <font color="black">}</font>
                <font color="blue">else</font>
                <font color="black">{</font>
                    <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararID<font color="black">(</font>DatoSerializadoAEliminar, informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
                    <font color="black">{</font>
                        memmove<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">+</font><font color="maroon">1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,<font color="black">(</font>CantidadBloquesUsados<font color="black">-</font>i<font color="maroon">-1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
                        <font color="blue">break</font>;
                    <font color="black">}</font>
                <font color="black">}</font>
            <font color="black">}</font>
        <font color="black">}</font>
    <font color="black">}</font>

    CantidadBloquesUsados<font color="black">-</font><font color="black">-</font>;
<font color="black">}</font>



<font color="blue">void</font> IndiceLineal<font color="black">:</font><font color="black">:</font>Cargar<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>datoSerializadoACargar, <font color="blue">unsigned</font> <font color="blue">int</font> id<font color="black">)</font> <font color="blue">throw</font><font color="black">(</font>IndexException<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>CantidadBloquesReservados<font color="black">=</font><font color="black">=</font>CantidadBloquesUsados<font color="black">)</font>
        Redimencionar<font color="black">(</font>CantidadBloquesReservados<font color="black">*</font><font color="maroon">1</font>.<font color="maroon">5</font><font color="black">)</font>;


    <font color="blue">int</font> comparacion;
    <font color="blue">int</font> i;
    <font color="blue">for</font><font color="black">(</font>i<font color="black">=</font><font color="maroon">0</font>;i<font color="black">&#60;</font>CantidadBloquesUsados;i<font color="black">+</font><font color="black">+</font><font color="black">)</font>
    <font color="black">{</font>
        comparacion<font color="black">=</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararClave<font color="black">(</font>datoSerializadoACargar,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font>;

        <font color="blue">if</font><font color="black">(</font>comparacion<font color="black">=</font><font color="black">=</font><font color="maroon">0</font> <font color="black">)</font>
        <font color="black">{</font>
            <font color="blue">if</font><font color="black">(</font>EsIndicePrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
                <font color="green">//el dato ya esta</font>
                <font color="blue">throw</font> IndexException<font color="black">(</font><font color="black">)</font>;
            <font color="blue">else</font>
                <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>CompararID<font color="black">(</font>datoSerializadoACargar,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
                    <font color="blue">throw</font> IndexException<font color="black">(</font><font color="black">)</font>;
        <font color="black">}</font>

        <font color="blue">if</font><font color="black">(</font>comparacion<font color="black">&#60;</font><font color="maroon">0</font><font color="black">)</font>
            <font color="green">//encontre el lugar donde ponerla</font>
            <font color="blue">break</font>;
    <font color="black">}</font>

    memmove<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font><font color="black">(</font>i<font color="black">+</font><font color="maroon">1</font><font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,<font color="black">(</font>CantidadBloquesUsados<font color="black">-</font>i<font color="black">)</font><font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>;

    <font color="blue">char</font><font color="black">*</font> aux<font color="black">=</font>dato<font color="black">-</font><font color="black">&#62;</font>GetDato<font color="black">(</font>datoSerializadoACargar, id<font color="black">)</font>;
    memcpy<font color="black">(</font>informacion<font color="black">+</font><font color="black">(</font>i<font color="black">*</font>GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>,aux,GetTamanioBloque<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    free<font color="black">(</font>aux<font color="black">)</font>;

    CantidadBloquesUsados<font color="black">+</font><font color="black">+</font>;

<font color="black">}</font>






</PRE>
</BODY>
</HTML>
